/**
 * 身份验证服务
 * 使用localStorage存储用户状态，解决跨域Cookie问题
 */
import myAxios from '../plugins/myAxios';

// 存储键
const TOKEN_KEY = 'auth_token';
const USER_KEY = 'user_info';

/**
 * 登录服务
 * @param {string} userAccount - 用户账号
 * @param {string} userPassword - 用户密码
 * @returns {Promise<Object>} - 登录结果
 */
export async function login(userAccount, userPassword) {
  try {
    const res = await myAxios.post('/user/login', {
      userAccount,
      userPassword
    });
    
    if (res.code === 0 && res.data) {
      // 登录成功，存储用户信息
      localStorage.setItem(USER_KEY, JSON.stringify(res.data));
      // 生成并存储一个包含用户ID的令牌 (时间戳+随机数+用户ID)
      const timestamp = Date.now();
      const random = Math.random().toString(36).substring(2);
      const userId = res.data.id;
      const token = `${timestamp}_${random}_${userId}`;
      localStorage.setItem(TOKEN_KEY, token);
      
      return {
        success: true,
        data: res.data
      };
    }
    
    return {
      success: false,
      message: res.message || '登录失败'
    };
  } catch (error) {
    console.error('登录失败:', error);
    return {
      success: false,
      message: error.message || '登录请求失败'
    };
  }
}

/**
 * 检查用户是否已登录
 * @returns {boolean}
 */
export function isLoggedIn() {
  return !!localStorage.getItem(TOKEN_KEY);
}

/**
 * 获取当前登录用户信息
 * @returns {Object|null}
 */
export function getCurrentUser() {
  const userJson = localStorage.getItem(USER_KEY);
  return userJson ? JSON.parse(userJson) : null;
}

/**
 * 退出登录
 */
export function logout() {
  localStorage.removeItem(TOKEN_KEY);
  localStorage.removeItem(USER_KEY);
  // 可选：调用后端登出接口
  myAxios.post('/user/logout').catch(err => console.error('登出请求失败:', err));
}

/**
 * 请求拦截器工厂函数
 * 为请求添加认证信息
 */
export function createAuthInterceptor() {
  return function(config) {
    const token = localStorage.getItem(TOKEN_KEY);
    if (token) {
      // 添加自定义头部认证信息
      config.headers = {
        ...config.headers,
        'X-Auth-Token': token
      };
    }
    return config;
  };
}

export default {
  login,
  isLoggedIn,
  getCurrentUser,
  logout,
  createAuthInterceptor
}; 